# -*- coding: utf-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt


#效果：对于某些图像的黑白分明更明显
def cv_show(img,name,writename):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.imwrite(writename,img)
    cv2.destroyAllWindows()
# 1、原图直方图和均衡化直方图对比

#读取原始图像的灰度图
img = cv2.imread('clahe.jpg',0)
#计算直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
# print(hist.shape)
# plt.hist(img.ravel(),256)
# plt.show()
#传入图像到直方图均衡化函数
equ = cv2.equalizeHist(img)
# print(equ.shape)
# plt.hist(equ.ravel(),256)
# plt.show()

# #原图直方图和均衡化直方图对比图
# plt.subplot(221),plt.hist(img.ravel(),256)
#
# plt.subplot(222),plt.hist(equ.ravel(),256)
#
# plt.subplot(223),plt.imshow(img, cmap='gray')
# plt.subplot(224),plt.imshow(equ, cmap='gray')
#
# #用plt显示原图和均衡化后对比图会出现均衡化对比图显示一半，
# # 因为两张图的大小不一样，而指定x轴刻度最大为256,
# # x刻度改为图片尺寸最大值即可
#
# plt.xlim([0,500])
# plt.savefig('02clahe02.png')
# plt.show()
# #保存plt显示的图片。要在show前保存，在之后保存会保存为一张空白图片，
# # 因为plt.show()会创建一张空白图片（坐标轴），再保存等于把空白图片做了保存


# 自适应直方图均衡化
clahe = cv2.createCLAHE(clipLimit = 2.0,tileGridSize=(8,8))
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
#自适应均衡化还有更多细节处理后续用到再做说明
#原图，直方图均衡化，自适应直方图均衡化对比图
cv_show(res,'res','03clahe1.png')

